package org.bopis.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.bopis.domain.UserContainer;
import org.bopis.form.ActivacionUsuarioForm;
import org.bopis.general.Constantes;
import org.bopis.services.db.DAOUsuario;
import org.bopis.services.mail.MailSender;

import com.boole.model.Usuario;

/**
 * Action encargado de gestionar la activacion de cuenta de usuario
 * @author i-fernandezmolina
 *
 */
public class ActivacionUsuarioAction extends CustomBaseAction{

	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		//variables
		String asunto = Constantes.EMAIL_ASUNTO_CONFIRMACION_CUENTA_ACTIVADA;
		String mensaje = Constantes.EMAIL_MENSAJE_CONFIRMACION_CUENTA_ACTIVADA;
		String codigoActivacion = null;
		
				
		//recogemos el codigo de activacion
		codigoActivacion = ((ActivacionUsuarioForm) form).getCodigoActivacion();
		
		//activamos al usuario
		Usuario usuario = DAOUsuario.activarUsuario(codigoActivacion);
		
		//comprobamos si el usuario existia
		if(usuario == null){
			addActionError(request, "activacion.error.codigo.invalid", "activacion.error.codigo.invalid"); 
			return mapping.findForward("Failure");
		}
		
		//enviamos un mail al usuario con los datos de acceso
		MailSender mailSender = new MailSender();
		mailSender.sendEmail(usuario.getEmail(), usuario.getScreenname(), asunto, mensaje);
				
		// Metemos los datos del usuario en la sesion para dejarle logado en la plataforma.
    	UserContainer existingContainer = getUserContainer(request);
    	existingContainer.setUsuario(usuario);
    	addActionMessage(request, "activacion.cuenta.activada");
    	
    	//cambiamos el codigo de activacion
    	DAOUsuario.resetCodigoActivacion(usuario.getEmail());    	
    	
    	return mapping.findForward("Success");

	}
	
}
